import scrapy
from scrapy_cnity.items import ScrapyCnityItem

class ZtwSpider(scrapy.Spider):
    name = 'ZTW'
    allowed_domains = ['www.cnity.cn']
    # start_urls = ['http://www.cnity.cn/']
    # 备用链接：
        # 中国体育
        #       start_urls = ['http://www.cnity.cn/e/search/result/?searchid=211']
        #       'http://www.cnity.cn/e/search/result/index.php?page=1&searchid=211'

        # 篮球
        #        start_urls = ['http://www.cnity.cn/e/search/result/index.php?page=2&searchid=61']

    start_urls = ['http://www.cnity.cn/e/search/result/index.php?page=0&searchid=105']

    # 多页下载
    base_url = 'http://www.cnity.cn/e/search/result/index.php?page='
    # page 从零开始
    page = 0


    def parse(self, response):

        # 所有的selector的对象 都可以再次调用xpath方法
        # 得到文章标题  //div[@class="mainM"]/div[@class="searchResults"]/p[1]/a/text()
        # 得到文章链接  //div[@class="mainM"]/div[@class="searchResults"]/p[1]/a/@href  需要拼接
        # 得到文章介绍   //div[@class="mainM"]/div[@class="searchResults"]/p[2]/text()
        #   http://www.cnity.cn             /ty/wajs/34214.html

        base_article = 'http://www.cnity.cn'

        xinwen_list = response.xpath('//div[@class="mainM"]/div[@class="searchResults"]')

        for xinwen in xinwen_list:

            src=xinwen.xpath('./p[1]/a/@href').get()

            # 文章链接 需要拼接一下
            xinwen_src = base_article + src

            xinwen_title  = xinwen.xpath('./p[1]/a/text()').get()

            # 通过meta参数 传值
            yield scrapy.Request(url=xinwen_src,callback=self.parse_xinwen_content,meta={'title':xinwen_title,'src':xinwen_src})



            # 每一页爬取的业务逻辑都是一样的，所以我们只需要将执行的那个页的请求再次调用parse方法就可以来
            # 第二页:   http://www.cnity.cn/e/search/result/index.php?page=1&searchid=105
            # 第三页:   http://www.cnity.cn/e/search/result/index.php?page=2&searchid=105
            # 第四页：  http://www.cnity.cn/e/search/result/index.php?page=3&searchid=105
            if self.page < 15:
                self.page = self.page + 1
                # 一种方法是自己拼接出地址
                url = self.base_url + str(self.page) + '&searchid=105'
                # 还有一种是自己去找到 “下一页”的标签名字 进而得到下一页的地址
                # 怎么去调用parse方法
                # scrapy.Request就是scrapy的get请求
                # url就是请求地址
                # callback是你要执行的那个函数 注意不需要加()
                yield scrapy.Request(url=url, callback=self.parse)


    def parse_xinwen_content(self,response):
        # 注意 xpath部分语法
        src = response.meta['src']
        title = response.meta['title']

        paragraph_list = response.xpath('//div[@id="text"]/p/text()')
        article = ''
        for paragraph in paragraph_list:
            # 数据处理，清洗掉编码不必要的格式

            str = paragraph.get()
            # 如果该段落为图片、视频，就会识别文字为空  则跳过对该数据的清洗
            if str:
                str = "".join(str.split())
                # 添加Windows系统下的段落换行符
                article = article+str+'\r\n'

        # 生产返回的文章对象

        one_xinwen = ScrapyCnityItem(src=src, title=title, article=article)
        yield one_xinwen





